/*
 * GerenciamentoEnderecoImpl.java
 * Classe que implementa a interface GerenciamentoEndereco.
 *
 */
package br.com.werp.regras.endereco;

import br.com.werp.regras.endereco.controle.ControleBairro;
import br.com.werp.regras.endereco.controle.ControleCep;
import br.com.werp.regras.endereco.controle.ControleCidade;
import br.com.werp.regras.endereco.controle.ControleLogradouro;
import br.com.werp.regras.endereco.controle.ControlePais;
import br.com.werp.regras.endereco.controle.ControleUF;
import br.com.werp.regras.geral.ErroPadrao;
import br.com.werp.regras.geral.GerenciadorErros;
import br.com.werp.regras.geral.GerenciamentoEndereco;
import br.com.werp.regras.geral.vos.endereco.CepFormVO;
import br.com.werp.regras.geral.vos.tabelas.Bairro;
import br.com.werp.regras.geral.vos.tabelas.Logradouro;
import br.com.werp.regras.geral.vos.tabelas.Uf;

import java.util.List;


/**
 * @author Paulo Sobreira
 * @author Rafael Carneiro - <a href = "mailto:rafael@portaljava.com">
 * rafael@portaljava.com</a>
 *
 * Criado em: 02/05/2005
 *
 */
public class GerenciamentoEnderecoImpl implements GerenciamentoEndereco {
    private static GerenciamentoEnderecoImpl gerenciamentoEnderecoImpl;
    private ControleCep controleCep = new ControleCep();
    private ControleBairro controleBairro = new ControleBairro();
    private ControleCidade controleCidade = new ControleCidade();
    private ControleLogradouro controleLogradouro = new ControleLogradouro();
    private ControlePais controlePais = new ControlePais();
    private ControleUF controleUF = new ControleUF();

    private GerenciamentoEnderecoImpl() {
    }

    public static GerenciamentoEnderecoImpl getGerenciamentoEnderecoImpl() {
        if (gerenciamentoEnderecoImpl == null) {
            gerenciamentoEnderecoImpl = new GerenciamentoEnderecoImpl();
        }

        return gerenciamentoEnderecoImpl;
    }

    /**
     * Pesquisa  e retorna um cep do banco.
     * @param cep - cep a ser pesquisado.
     * @return lista de CepFormVO preenchido do banco
     * @throws ErroPadrao
     */
    public CepFormVO pesquisarCep(String cep) throws ErroPadrao {
        try {
            return controleCep.pesquisarCep(cep);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    /**
      * Pesquisa um cep e retorna um CepFormVO preenchido do banco.
      * @param cep - cep a ser pesquisado.
      * @return lista de CepFormVO preenchido do banco
      * @throws ErroPadrao
      */
    public List pesquisarCep(Object cepFormVO) throws ErroPadrao {
        try {
            return controleCep.pesquisarCep(cepFormVO);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void salvarBairro(Object form, String usuario)
        throws ErroPadrao {
        try {
            controleBairro.salvarBairro(form, usuario);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public List pesquisarBairros(Object form) throws ErroPadrao {
        try {
            return controleBairro.pesquisarBairros(form);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public List pesquisarCidade(Object form) throws ErroPadrao {
        try {
            return controleCidade.pesquisarCidade(form);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public List pesquisarLogradouros(Object form) throws ErroPadrao {
        try {
            return controleLogradouro.pesquisarLogradouros(form);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public List pesquisarPais(Object form) throws ErroPadrao {
        try {
            return controlePais.pesquisarPais(form);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public List pesquisarUF(Object form) throws ErroPadrao {
        try {
            return controleUF.pesquisarUF(form);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public List pesquisarUFVOTabela(Uf uf) throws ErroPadrao {
        try {
            return controleUF.pesquisarUFVOTabela(uf);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public List pesquisarBairroVOTabela(Bairro bairro)
        throws ErroPadrao {
        try {
            return controleBairro.pesquisarBairroVOTabela(bairro);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public List pesquisarLogradouroVOTabela(Logradouro logradouro)
        throws ErroPadrao {
        try {
            return controleLogradouro.pesquisaLogradouroVOTabela(logradouro);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void carregarCidade(Object form) throws ErroPadrao {
        try {
            controleCidade.carregarCidade(form);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void excluirCidade(Object form, String usuario)
        throws ErroPadrao {
        try {
            controleCidade.excluirCidade(form, usuario);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void salvarCidade(Object form, String usuario)
        throws ErroPadrao {
        try {
            controleCidade.salvarCidade(form, usuario);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void carregarUF(Object form) throws ErroPadrao {
        try {
            controleUF.carregarUF(form);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void excluirUF(Object form, String usuario)
        throws ErroPadrao {
        try {
            controleUF.excluirUF(form, usuario);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void salvarUF(Object form, String usuario) throws ErroPadrao {
        try {
            controleUF.salvarUF(form, usuario);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void carregarLogradouro(Object form) throws ErroPadrao {
        try {
            controleLogradouro.carrearLogradouro(form);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void excluirLogradouro(Object form, String usuario)
        throws ErroPadrao {
        try {
            controleLogradouro.excluirrLogradouro(form, usuario);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void salvarLogradouro(Object form, String usuario)
        throws ErroPadrao {
        try {
            controleLogradouro.salvarLogradouro(form, usuario);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void carregarPais(Object form) throws ErroPadrao {
        try {
            controlePais.carregarPais(form);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void excluirPais(Object form, String usuario)
        throws ErroPadrao {
        try {
            controlePais.excluirPais(form, usuario);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void salvarPais(Object form, String usuario)
        throws ErroPadrao {
        try {
            controlePais.salvarPais(form, usuario);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void carregarCep(Object form) throws ErroPadrao {
        try {
            controleCep.carregarCep(form);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void excluirCep(Object form, String usuario)
        throws ErroPadrao {
        try {
            controleCep.excluirCep(form, usuario);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void salvarCep(Object form, String usuario)
        throws ErroPadrao {
        try {
            controleCep.salvarCep(form, usuario);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void carregarBairro(Object form) throws ErroPadrao {
        try {
            controleBairro.carregarBairro(form);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }

    public void excluirBairro(Object form, String usuario)
        throws ErroPadrao {
        try {
            controleBairro.excluirBairro(form, usuario);
        } catch (Exception e) {
            throw new ErroPadrao(GerenciadorErros.logarErro(e));
        }
    }
}
